home *** CD-ROM | disk | FTP | other *** search
/ Computer Inter@ctive 16 / Computer Interactive cdrom 16 - dic 98.iso / zdnetit / content / CLASSBLD.ZIP / Include / CB_CriticalMultiOwned.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-06  |  7.4 KB  |  212 lines

  1. #ifndef CB_CRITICAL_MULTI_OWNED_H
  2. #define CB_CRITICAL_MULTI_OWNED_H
  3.  
  4. #include "CB_CriticalMulti.h"
  5. #include "CB_MultiOwned.h"
  6.  
  7. // defines for include files
  8. #define RELATION_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  9. public:\
  10.     ClassTo* _first##NameTo;\
  11.     ClassTo* _last##NameTo;\
  12.     int _count##NameTo;\
  13. \
  14. public:\
  15.     static CriticalSection _criticalSection##NameTo;\
  16. \
  17. protected:\
  18.     void Add##NameTo##First(ClassTo* item);\
  19.     void Add##NameTo##Last(ClassTo* item);\
  20.     void Add##NameTo##After(ClassTo* item, ClassTo* pos);\
  21.     void Add##NameTo##Before(ClassTo* item, ClassTo* pos);\
  22.     void Remove##NameTo(ClassTo* item);\
  23.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  24. \
  25. public:\
  26.     void DeleteAll##NameTo();\
  27.     ClassTo* GetFirst##NameTo();\
  28.     ClassTo* GetLast##NameTo();\
  29.     ClassTo* GetNext##NameTo(ClassTo* pos);\
  30.     ClassTo* GetPrev##NameTo(ClassTo* pos);\
  31.     int Get##NameTo##Count();\
  32.     void Move##NameTo##First(ClassTo* item);\
  33.     void Move##NameTo##Last(ClassTo* item);\
  34.     void Move##NameTo##After(ClassTo* item, ClassTo* pos);\
  35.     void Move##NameTo##Before(ClassTo* item, ClassTo* pos);\
  36.     void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*));\
  37.     ITERATOR_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  38.  
  39. #define RELATION_NOFILTER_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  40. public:\
  41.     ClassTo* _first##NameTo;\
  42.     ClassTo* _last##NameTo;\
  43.     int _count##NameTo;\
  44. \
  45. public:\
  46.     static CriticalSection _criticalSection##NameTo;\
  47. \
  48. protected:\
  49.     void Add##NameTo##First(ClassTo* item);\
  50.     void Add##NameTo##Last(ClassTo* item);\
  51.     void Add##NameTo##After(ClassTo* item, ClassTo* pos);\
  52.     void Add##NameTo##Before(ClassTo* item, ClassTo* pos);\
  53.     void Remove##NameTo(ClassTo* item);\
  54.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  55. \
  56. public:\
  57.     void DeleteAll##NameTo();\
  58.     ClassTo* GetFirst##NameTo();\
  59.     ClassTo* GetLast##NameTo();\
  60.     ClassTo* GetNext##NameTo(ClassTo* pos);\
  61.     ClassTo* GetPrev##NameTo(ClassTo* pos);\
  62.     int Get##NameTo##Count();\
  63.     void Move##NameTo##First(ClassTo* item);\
  64.     void Move##NameTo##Last(ClassTo* item);\
  65.     void Move##NameTo##After(ClassTo* item, ClassTo* pos);\
  66.     void Move##NameTo##Before(ClassTo* item, ClassTo* pos);\
  67.     void Sort##NameTo(int (*comp)(ClassTo*, ClassTo*));\
  68.     ITERATOR_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  69.  
  70. #define RELATION_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  71.     RELATION_CRITICAL_MULTI_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  72.  
  73. #define INIT_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  74. {\
  75.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  76.     INIT_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  77. }
  78.  
  79. #define EXIT_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  80. {\
  81.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  82.     EXIT_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  83. }
  84.  
  85. #define REPLACE_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  86. {\
  87.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  88.     REPLACE_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  89. }
  90.  
  91. #define INIT_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  92. {\
  93.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  94.     INIT_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  95. }
  96.  
  97. #define EXIT_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  98. {\
  99.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  100.     EXIT_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  101. }
  102.  
  103. #define REPLACE_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  104. {\
  105.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  106.     REPLACE_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  107. }
  108.  
  109. #define METHODS_CRITICAL_MULTI_OWNED_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  110.     CriticalSection ClassFrom##::_criticalSection##NameTo;\
  111. void ClassFrom##::Add##NameTo##First(ClassTo* item)\
  112. {\
  113.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  114.     METHOD_MULTI_ADDFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  115. }\
  116. \
  117. void ClassFrom##::Add##NameTo##Last(ClassTo* item)\
  118. {\
  119.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  120.     METHOD_MULTI_ADDLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  121. }\
  122. \
  123. void ClassFrom##::Add##NameTo##After(ClassTo* item, ClassTo* pos)\
  124. {\
  125.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  126.     METHOD_MULTI_ADDAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  127. }\
  128. \
  129. void ClassFrom##::Add##NameTo##Before(ClassTo* item, ClassTo* pos)\
  130. {\
  131.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  132.     METHOD_MULTI_ADDBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  133. }\
  134. \
  135. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  136. {\
  137.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  138.     METHOD_MULTI_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  139. }\
  140. \
  141. void ClassFrom##::DeleteAll##NameTo()\
  142. {\
  143.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  144.     METHOD_MULTI_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  145. }\
  146. \
  147. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  148. {\
  149.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  150.     METHOD_MULTI_REPLACE(ClassFrom, NameFrom, ClassTo, NameTo) \
  151. }\
  152. \
  153. ClassTo* ClassFrom##::GetFirst##NameTo()\
  154. {\
  155.     METHOD_MULTI_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  156. }\
  157. \
  158. ClassTo* ClassFrom##::GetLast##NameTo()\
  159. {\
  160.     METHOD_MULTI_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  161. }\
  162. \
  163. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos)\
  164. {\
  165.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  166.     METHOD_MULTI_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  167. }\
  168. \
  169. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos)\
  170. {\
  171.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  172.     METHOD_MULTI_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  173. }\
  174. \
  175. int ClassFrom##::Get##NameTo##Count()\
  176. {\
  177.     METHOD_MULTI_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  178. }\
  179. \
  180. void ClassFrom##::Move##NameTo##First(ClassTo* item)\
  181. {\
  182.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  183.     METHOD_MULTI_MOVEFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  184. }\
  185. \
  186. void ClassFrom##::Move##NameTo##Last(ClassTo* item)\
  187. {\
  188.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  189.     METHOD_MULTI_MOVELAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  190. }\
  191. \
  192. void ClassFrom##::Move##NameTo##After(ClassTo* item, ClassTo* pos)\
  193. {\
  194.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  195.     METHOD_MULTI_MOVEAFTER(ClassFrom, NameFrom, ClassTo, NameTo) \
  196. }\
  197. \
  198. void ClassFrom##::Move##NameTo##Before(ClassTo* item, ClassTo* pos)\
  199. {\
  200.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  201.     METHOD_MULTI_MOVEBEFORE(ClassFrom, NameFrom, ClassTo, NameTo) \
  202. }\
  203. \
  204. void ClassFrom##::Sort##NameTo##(int (*comp)(ClassTo*, ClassTo*))\
  205. {\
  206.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  207.     METHOD_MULTI_SORT(ClassFrom, NameFrom, ClassTo, NameTo) \
  208. }
  209.  
  210. #define METHODS_CRITICAL_MULTI_OWNED_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  211.  
  212. #endif